2012-11-13 157 views
0

我正在为一个有博客/新闻页面作为其网站一部分的客户进行项目工作。这一切都很好,但他们要求他们有自定义永久链接,而不是标准问题php变量。.htaccess mod_rewrite无法正常工作。重定向到404错误

我在searchfriendlyurls.com上使用了生成器来创建重写规则。我已经添加到我的.htaccess文件,该文件位于网站的根文件夹中,但是当我点击链接时,它只是将我发送到我的主机404错误页面。有什么建议么。下面.htaccess文件:

Options -Multiviews 

RewriteEngine On 
RewriteBase/

# Force search engines to use domain.example.org.uk 
RewriteCond %{HTTP_HOST} !^domain\.example\.org\.uk$ 
RewriteRule ^(.*) http://domain.example.org.uk/$1 [R=301,L] 

# Specify search friendly URLs 
RewriteRule ^media/news/([a-z]+)/([a-z]+)/([a-z]+)/([a-z]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L] 

# Generated for free at SearchFriendlyURLs.com 

任何建议,将不胜感激

+0

你可以添加一些例子,你点击什么确切的链接上? – jeroen

+0

将我带到文章页面的链接位于主页上,目前链接到干净的'漂亮'网址。 –

回答

0

添加另一个正则表达式变化到混合:

RewriteRule ^media/news/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L] 

例如对于URL路径:/媒体/新闻/ 2012/11 /试验品/ 1

重写日志,如果启用,将显示:

[rid#7f920b4b00a0/initial] (3) [perdir /srv/www/htdocs/] applying pattern '^media/news/([^/]+)/([^/]+)/([^/]+)/([^/]+)$' to uri 'media/news/2012/11/test-article/1' 
[rid#7f920b4b00a0/initial] (2) [perdir /srv/www/htdocs/] rewrite 'media/news/2012/11/test-article/1' -> '/media/news/article.php?article_url_year=2012&article_url_month=11&article_url_title=test-article&article_id=1' 
[rid#7f920b4b00a0/initial] (3) split uri=/media/news/article.php?article_url_year=2012&article_url_month=11&article_url_title=test-article&article_id=1 -> uri=/media/news/article.php, args=article_url_year=2012&article_url_month=11&article_url_title=test-article&article_id=1 
[rid#7f920b4b00a0/initial] (2) [perdir /srv/www/htdocs/] trying to replace prefix /srv/www/htdocs/ with/
[rid#7f920b4b00a0/initial] (1) [perdir /srv/www/htdocs/] internal redirect with /media/news/article.php [INTERNAL REDIRECT] 
[rid#7f920bcdda00/initial/redir#1] (3) [perdir /srv/www/htdocs/] strip per-dir prefix: /srv/www/htdocs/media/news/article.php -> media/news/article.php 
[rid#7f920bcdda00/initial/redir#1] (3) [perdir /srv/www/htdocs/] applying pattern '^media/news/([^/]+)/([^/]+)/([^/]+)/([^/]+)$' to uri 'media/news/article.php' 
[rid#7f920bcdda00/initial/redir#1] (1) [perdir /srv/www/htdocs/] pass through /srv/www/htdocs/media/news/article.php 
+0

这也行不通... –

+0

你在浏览器中输入了什么网址? – arober11

+0

我在浏览器中输入了干净的网址,但它仍然不起作用 –

0

我注意到,您的article.php可能期待numbers您的查询article.php判断? article_url_year= $ 1 & article_url_month= $ 2但是您的RewriteRule RewriteRule^media/news/([a-z]+)只会匹配字母。

尝试更换这行:

RewriteRule ^media/news/([a-z]+)/([a-z]+)/([a-z]+)/([a-z]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L] 

有了这个:

RewriteRule ^media/news/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)$ /media/news/article.php?article_url_year=$1&article_url_month=$2&article_url_title=$3&article_id=$4 [L] 

,看看它是否工作。

此代码将只允许:

  • 所有字母(大写和小写)。
  • 所有数字。
  • 破折号( - )
+0

我试图将表达式更改为您所建议的表达方式,但仍然无济于事......我可以澄清一下:链接将我带到文章页面是否需要指向查询或生成的网址? –