2015-06-26 64 views
1

我想与漂亮的网址一起工作。但它会去404.php 我不知道我的.htaccess有什么问题。我是新与此prettyurlprettyurl我无法打印值

的.htaccess

RewriteEngine on 

RewriteRule ^([0-9]+)/$ test.php?id=$1 

# not a file 
RewriteCond %{REQUEST_FILENAME} !-f 
# not a directory 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule .? /404.php [L] 

在我的test.php的

这里是唯一的代码里面我test.php的

if(isset($_GET['id'])){ 
    $id = $_GET['id']; 
    echo $id; 
} 

,但它不是打印。

我指出我的浏览器这样的

http://localhost/myprojectfolder/test/1

我的项目结构

myporjectfolder 
    - index.php 
    - .htaccess 
    - test.php 

预先感谢您。

+0

了/ test文件夹它目前还不清楚你的问题......如果重写的工作原理如上所述倾向于,然后在内部用'$ _GET ['id']'参数调用脚本'test.php' _is_。你可以用它正常的方式... – arkascha

+0

但为什么不打印1? – jemz

+0

然后很明显重写是不工作的......这个'.htaccess'风格文件位于文件夹层次结构中的位置?此外,请确保您不会遇到缓存问题,请在浏览器中进行深度重新加载或完全禁用缓存以进行测试... – arkascha

回答

2

我认为你有几个问题。您指向http://localhost/myprojectfolder/test/1,但您的规则中没有/test。你只有接受数字。此外,您并未在网址末尾使用斜线,但您的规则声明它应该在那里,因此不会与任何匹配,除非您将其设为可选。

此外,您正在将不存在的文件导向到404.php。制作漂亮的网址,你正在尝试做的也是不存在的文件。所以这可能会导致问题。

不管怎样,试试你的规则,这样的URL像这样

http://localhost/myprojectfolder/test/1

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^test/([0-9]+)/?$ test.php?id=$1 [L] 

或拆除似乎是不必要反正

http://localhost/myprojectfolder/1

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9]+)/?$ test.php?id=$1 [L] 
+0

“或者删除看起来不必要的/ test文件夹”,测试不是一个文件夹它是一个php文件 – jemz

+0

正确,但是您在URL中使用它,所以您的规则将不匹配,除非您将其添加到重写规则。看我的第一个例子。你**不需要**在URL中测试,因此我的第二个例子。 –

+0

非常感谢你现在的作品,我现在明白了,但是[L]是什么必要的? – jemz