mod_rewrite用于干净的URL不起作用

时间:2012-08-10 17:44:02

标签: apache .htaccess

我已经查看了apache服务器的每个问题和reWriteRule的每个示例......没有任何效果。

我只需要改变 http://beta.EXAMPLE.com/profile.php?profile_name=ntgCleanerhttp://beta.EXAMPLE.com/ntgCleaner

我必须查看是否my .htaccess file is being read并查看if mod_rewrite is enabled并且它们都完美无缺。

出于某种原因,我遇到的例子对我不起作用。以下是一些例子。

RewriteEngine On
RewriteRule /(.*)$ /profile.php?username=$1 

RewriteEngine On 
RewriteBase /
RewriteRule ^profile\/(.*)$ ./profile.php?profileId=$1 [L,NC,QSA]

Options +FollowSymlinks
RewriteEngine on
RewriteOptions MaxRedirects=10
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?profile_name=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?profile_name=$1

但这些都不起作用。这是因为我使用的是子域吗?我计划在完成网站时最终将子域名从BETA切换到www。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/?$ /profile.php?profile_name=$1 [L,QSA]

您的示例中包含许多不同的查询字符串,因此我不确定哪一个是您真正想要的那个。您有?username=?profileId=?profile_name=

答案 1 :(得分:0)

你必须使用条件(RewriteCond),当条件满足时,应用规则(RewriteRule)。因此,当您不使用条件时,不使用规则,因为引擎不知道使用它的原因。

RewriteCond必须在RewriteRule之前使用,我将它用于这种形式的web-bot:

RewriteCond %{REMOTE_HOST} .googlebot.com$ [NC,OR]
RewriteCond %{REMOTE_HOST} .search.msn.com$ [NC,OR]
RewriteCond %{REMOTE_HOST} .kimsufi.com$ [NC]
RewriteRule ^.*$ /errors/404.html [F]