Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

Archive /

Our old forums are still available as a read-only archive.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo

mod_rewrite experience


Go to End


1682 Views

Avatar
toopy

Community Member, 9 Posts

24 May 2008 at 9:10pm

Edited: 24/05/2008 9:27pm

I had a mod_rewrite problem with my ss-web-site that resides on a shared Apache-host.

When installing SS in a subfolder like /<my-website>/silverstripe/ SS did not work at all.

When installing SS without subfolder like /<my-website>/ SS did work more or less for short URLs like http://<my-website>/admin.

With long URLs that use many /Parameters/ like an Ajax-Request that loads the Image-Uploading-Form into a StaffPage-Image-Tag of the CMS, I got JS-errors and the Page-Not-Found-Page was loaded in place of the requested form.

By comparing this with a properly working SS-installation on a Wampserver I found that it had to do with the way that Apache (Php?) delivers some $_SERVER-fields that SS evaluates on every request (both installations in subfolder /silverstripe). Rewrite takes place in both installations but:

 
With Windows-Wamp-Apache-Server:
  $_SERVER["SCRIPT_NAME"]      shows the rewritten URL /silverstripe/sapphire/main.php
.
  $_SERVER["ORIG_SCRIPT_NAME"] is not set
.
  In main.php the $baseURL is calulated to:  /silverstripe  which is correct
.
With shared Apache-Host:
  $_SERVER["SCRIPT_NAME"]      shows /silverstripe/admin (not rewritten)
.
  $_SERVER["ORIG_SCRIPT_NAME"] shows the rewritten URL /silverstripe/sapphire/main.php
.
  In main.php the $baseURL is calulated to:  /  which is NOT correct
  The following line in main.php fails to return the proper $baseURL
.  
  ...
  // Get the request URL
  $baseURL = dirname(dirname($_SERVER["SCRIPT_NAME"]));
  ...

Now it works perfectly after inserting a bit of code
before the $baseURL-calculation line in sapphire/main.php
but I do not know wheter this is correct in every case.

 
  ...
  if (isset($_SERVER["ORIG_SCRIPT_NAME"])) {
    $_SERVER['SCRIPT_NAME']= $_SERVER["ORIG_SCRIPT_NAME"];
  }
.
  // Get the request URL
  $baseURL = dirname(dirname($_SERVER["SCRIPT_NAME"]));
  ...

May be this can help