HTAccess重写问题

时间:2015-01-09 15:05:08

标签: php .htaccess rewrite

我正在编写一个通过Oracle数据库动态填充的网站。

我已经完成了桌面网站,现在需要创建一个移动网站。由于网站计划的外观有多么不同,我选择创建2个不同的"模板"喜欢移动和桌面网站的网站。

但是,对于我的桌面站点,所有内容都是通过index.php文件构建的,以使其完全动态化。因此,页面在网址中看起来像www.domain.com/index.php/page

对于桌面网站,这有效。我使用通用的index.php删除重写规则,然后使网址www.domain.com/page仍显示与上一个网址相同的页面。

我的问题是,现在我有www.domain.com/mobile/index.php。在尝试向移动网站添加额外的动态网页时,已经创建了大部分工作。 www.domain.com/mobile/index.php/about例如只是重定向到www.domain.com/mobile/,它甚至不包含网址的about部分。

经过大量调试后,我发现肯定是导致问题的.htaccess

如果您对我的问题有任何见解,请帮助我。

提前致谢

编辑1

重写规则如下

# Removes index.php from ExpressionEngine URLs
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{REQUEST_URI} !/system/.* [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

3 个答案:

答案 0 :(得分:1)

根据您提到的调试情况,.htaccess中有一条规则正在将www.domain.com/mobile/index.php/about重写为www.domain.com/mobile/。因此,如果您发现这是一个规则,您可以添加一个以上,它将捕获您的移动页面请求的URL,然后不允许运行有问题的后续规则。像这样:

RewriteRule ^mobile/index.php/([a-zA-Z0-9-_]+)$ ^mobile/index.php/$1 [L,QSA]

L确保如果用户的请求符合此规则,则不会执行其他规则(包括导致问题的规则)。

答案 1 :(得分:1)

您可以在/mobile/.htaccess文件中使用此代码:

DirectoryIndex index.php
RewriteEngine On
RewriteBase /mobile/

RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^index\.php(?:/(.*))?$ $1 [L,R=302,NC,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php/$1 [L]

这将覆盖父{.1}} URI路径的父.htaccess中存在的所有规则。


简化版,使其在root .htaccess中工作:

/mobile/

答案 2 :(得分:0)

感谢你们给出的答案,但是他们都没有工作,我现在已经解决了这个问题,这与最后的RewriteRule有关

# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

我需要将其更改为

# Directs all EE web requests through the site index file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !/mobile/.* [NC]
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /mobile/.* [NC]
RewriteRule ^(.*)$ mobile/index.php/$1 [L]

这样它就适用于移动和桌面网站。