URL重写:规则适用于某些.php页面,但不适用于其他页面。

时间:2016-03-15 22:23:29

标签: php .htaccess mod-rewrite url-rewriting

我有一个.HTACCESS文件,允许用户在我的社交网站上写一个用户的username

我首先实施了这些规则,只需修改网址就可以轻松访问特定用户profile_page,即profile_page/freddy - 将我带到Freddy的个人资料页面等。规则正在运作。

我也有bio.php,这对每个用户都是唯一的。因此,我编写了与profile_page完全相同的规则,但只更改了文件名。但是,这不起作用,我收到404错误。

我有几个类似的页面,但profile_page的规则是唯一有效的。

.HTACCESS in full:

Options -MultiViews
RewriteEngine On
RewriteBase /

RewriteRule ^(me)?/?$ profile_page.php [L,NC]
RewriteRule ^profile(?:_page)?/([\w-]+)/?$ profile_page.php?u=$1 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ profile_page.php?u=$1 [L,QSA]

RewriteRule ^(me)?/?$ photos.php [L,NC]
RewriteRule ^photos?/([\w-]+)/?$ photos.php?u=$1 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ photos.php?u=$1 [L,QSA]

RewriteRule ^(me)?/?$ hearted_thoughts.php [L,NC]
RewriteRule hearted_thoughts([\w-]+)/?$ hearted_thoughts?u=$1 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ hearted_thoughts?u=$1 [L,QSA]

RewriteRule ^(me)?/?$ favourited.php [L,NC]
RewriteRule favourited([\w-]+)/?$ favourited?u=$1 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ favourited?u=$1 [L,QSA]

RewriteRule ^(me)?/?$ bio.php [L,NC]
RewriteRule bio([\w-]+)/?$ bio?u=$1 [L,QSA,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ bio?u=$1 [L,QSA]

1 个答案:

答案 0 :(得分:0)

由于重写的模式( ^(me)?/?$},您的rewriteRules彼此冲突  和 ^([w-]+)$ )在所有规则中。

像这样编辑你的规则:

Options -MultiViews
RewriteEngine On
RewriteBase /
#--let existent files and dir pass untouched--#
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
################  
#--rewrite /me to /profile_page.php--
RewriteRule ^(me)?/?$ profile_page.php [L,NC]
###############
#--Rewrite /profile/foo to /profile_page.php?u=foo--#
RewriteRule ^profile(?:_page)?/([\w-]+)/?$ profile_page.php?u=$1 [L,QSA,NC]
###############
#--rewrite /bio/foo to /bio.php?u=foo--#
RewriteRule ^bio/(.+)$ /bio.php?u=$1 [NC,L]
###############
#--other rules--#